strncat関数は、2つの文字列を長さを指定して連結します。
#include <string.h>
char *strncat(char *dest, const char *src, size_t n);
*destは連結先の文字列を指定します。
*srcは連結する文字列を指定します。*dest文字列に*src文字列を連結します。
nは連結する最大文字数を指定します。
戻り値として、第1引数*destのアドレスを返します。
*srcの長さがnより短い場合は、*srcの最後(ヌル文字)までが連結されます。また、nより長い場合は、nまで連結して、ヌル文字を付加します。
連結は*destに対して行いますので、*destは最低限「*dest自身の文字数+n+1」の大きさが必要です。
プログラム 例
#include <stdio.h> #include <string.h> #define STRING_MAX 51 char *StrChomp(char *); int main() { char dest[STRING_MAX]; char src[STRING_MAX]; int cat_len; printf('一つ目の文字列を入力してください(50文字以下) ==> '); fgets(dest, STRING_MAX, stdin); StrChomp(dest); if (strlen(dest) < (STRING_MAX - 1)) { /* 連結可能な文字数を算出 */ cat_len = STRING_MAX - strlen(dest) - 1; printf('二つ目の文字列を入力してください(%d文字以下) ==> ', cat_len); fgets(src, STRING_MAX, stdin); StrChomp(src); if (strlen(src) > cat_len) { printf('二つ目の文字列の%d文字を連結します\n', cat_len); } printf('連結結果:%s\n', strncat(dest, src, cat_len)); } else { printf('一つ目の文字列が長すぎて連結できません\n'); } return 0; } /* 改行削除 */ char *StrChomp(char *str) { char *str_p;; for (str_p = str; *str_p; ++str_p) ; if (*(str_p - 1) == '\n') { *(str_p - 1) = '\0'; } return str; }
例の実行結果
$ ./strncat.exe 一つ目の文字列を入力してください(50文字以下) ==> abc 123 二つ目の文字列を入力してください(43文字以下) ==> ABC 456 連結結果:abc 123ABC 456 $